#include <stdio.h>

// 数组名 是数组的首地址
// 函数名 是函数的首地址

// typedef 是干嘛的

// 为变量类型改名
typedef unsigned int u32;

// 宏替换
#define my_u32 unsigned int

/*
两者的区别
#define 需要改的变量名 写前面
typedef 需要在后面 加 ';'
*/

// 加
int add(int val1, int val2)
{
    return val1 + val2;
}

// 减
int subtract(int val1, int val2)
{
    return val1 - val2;
}

// 乘
int multiply(int val1, int val2)
{
    return val1 * val2;
}

// 除
int divide(int val1, int val2)
{
    return val1 / val2;
}

typedef int (*count_func)(int, int);

int main(int argc, char const *argv[])
{
    // 初始化 回调函数数组
    count_func func[4];
    // 回调函数数组 填写函数
    func[0] = add;
    func[1] = subtract;
    func[3] = multiply;
    func[3] = divide;

    int val_1 = 0;
    int val_2 = 0;
    char ch;

    printf("请输入你的算式");
    scanf("%d %c %d", &val_1, &ch, &val_2);

    switch (ch)
    {
    case '+':
        printf("%d + %d = %d\n", val_1, val_2, func[0](val_1, val_2));
        break;

    case '-':
        printf("%d + %d = %d\n", val_1, val_2, func[1](val_1, val_2));
        break;

    case '*':
        printf("%d + %d = %d\n", val_1, val_2, func[2](val_1, val_2));
        break;

    case '/':
        printf("%d + %d = %d\n", val_1, val_2, func[3](val_1, val_2));
        break;

    default:
        break;
    }

    return 0;
}
